package com.zyf.chapter02.creation.factory.factory_method;

import com.zyf.chapter02.creation.factory.util.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 为工厂类再创建一个简单工厂，也就是工厂的工厂，用来创建工厂类对象
 * <p />当我们只需要创建新的 parser 类和 parser factory 类，并且在 RuleConfigParserFactoryMap 类中，
 * 将新的 parser factory 对象添加到 cachedFactories 中即可。代码的改动非常少，基本符合开闭原则
 * @author yifeng
 */
public class RuleConfigParserFactoryMap {
    private static final Map<String, IRuleConfigParserFactory> cachedFactories = new HashMap<>();

    // 提前缓存 可节省内存和对象创建
    static {
        cachedFactories.put("json", new JsonRuleConfigParserFactory());
        cachedFactories.put("xml", new XmlRuleConfigParserFactory());
        cachedFactories.put("yaml", new YamlRuleConfigParserFactory());
        cachedFactories.put("properties", new PropertiesRuleConfigParserFactory());
    }


    public static IRuleConfigParserFactory createParser(String type) {
        if (type == null || type.isEmpty()) {
            return null;
        }
        IRuleConfigParserFactory parserFactory = cachedFactories.get(type.toLowerCase());
        return parserFactory;
    }
}
